﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio.catalogos;
using Negocio.clases_tontas;
using System.Text;

namespace Presentacion
{
    public partial class horarioIndividual : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            
            StringBuilder htmlTitulo = new StringBuilder();
            if (Request.QueryString["cod"] == null)
            {
                Response.Redirect("listaDistribucion.aspx");
            }
        } //Cierre evento Load
        
        /// <summary>
        /// Método para obtener el horario de clases individual por cada distribucion
        /// </summary>
        /// <param name="_idDocente">Número identificador al docente actual para filtrar la distribucion por docente</param>
        /// <param name="_idPeriodo">Número identificador de periodo actual para filtrar el horario</param>
        /// <param name="_codDistribucion">Número identificador de la distribicion a filtrar</param>
        /// <returns>Array de los eventos del horario de clase</returns>
        [System.Web.Services.WebMethod(true)]
        public static string obtenerHorarioIndividual(int _idDocente, int _idPeriodo, int _codDistribucion)
        {           
            catalogoHorario _objCatalagoHorario = new catalogoHorario();
            horarioClases _objHorarioClases = new horarioClases();
            string eventos = "["; 
            catalogoDistribucion _objDistribucion = new catalogoDistribucion();
            var listaDistribucion = _objDistribucion.obtenerDistribucion(_idDocente);
            //Inicio de bucle de nro de distribucion del docente
            int nroLista = 0;
            List<distribucion> _horaDistribucion = new List<distribucion>();
            for (int i = 0; i < listaDistribucion.Count; i++)
            {

                //Carga de eventos
                foreach (var item in (_objCatalagoHorario.obtenerHorario(_idPeriodo).Where(C => C.idDistribucion.idDistribucion == listaDistribucion[nroLista].idDistribucion)).Where(G => G.idDistribucion.idDistribucion == _codDistribucion))
                {

                    DateTime dia = DateTime.Now; //Obtiene dia actual
                  
                    //Buscar inicio de semana
                    //Inicio busqueda inicio de semana
                    while (dia.DayOfWeek != DayOfWeek.Monday)
                    {
                        if (dia.DayOfWeek == DayOfWeek.Sunday)
                        {
                            dia = dia.AddDays(1);
                        }
                        else
                        {
                            dia = dia.AddDays(-1);
                        }                        
                    }

                    while (dia.DayOfWeek.ToString() != item.detalle)
                    {
                        dia = dia.AddDays(1);
                    }//fin busqueda dia de la semana 

                    TimeSpan _intervaloHoraEntrada = TimeSpan.Parse(item.horaEntrada);
                    TimeSpan _intervaloHoraSalida = TimeSpan.Parse(item.horaSalida);

                    eventos = string.Concat(eventos, "{" +
                      "id: '" + item.idDetalleHorario + "'," +
                      "title: '" + HttpContext.Current.Server.HtmlEncode(item.idDistribucion.Nombre) + "'," +
                       "start: new Date(" + dia.Year + "," + dia.Month + "-1," + dia.Day + "," + _intervaloHoraEntrada.Hours + "," + _intervaloHoraEntrada.Minutes + ")," +
                      "end: new Date(" + dia.Year + "," + dia.Month + "-1," + dia.Day + "," + _intervaloHoraSalida.Hours + "," + _intervaloHoraSalida.Minutes + ")," +
                      "allDay: false," +
                      "backgroundColor: '" + item.backGroundColor +
                      "',borderColor: '" + item.borderColor +
                      "'},");
                } //Fin bucle eventos distribucion
                nroLista++;
            }//Fin bucle de lista distribucion
            DateTime dia2 = DateTime.Now; //Obtiene dia actual
            for (int i = 1; i <= 31; i++)
            {
                eventos = string.Concat(eventos, "{" +
                                 "id: 'CASYS'," +
                                 "title: ' --- CASYS --- '," +
                                 "start: new Date(" + dia2.Year + "," + dia2.Month + "-1," + i + ",7,0)," +
                                 "end: new Date(" + dia2.Year + "," + dia2.Month + "-1," + i + ",7,30)," +
                                 "allDay: false," +
                                 "backgroundColor: '#000000'," +
                                 "borderColor: '#000000'},");

                eventos = string.Concat(eventos, "{" +
                                     "id: 'CASYS'," +
                                     "title: 'CASYS RECESO'," +
                                     "start: new Date(" + dia2.Year + "," + dia2.Month + "-1," + i + ",10,30)," +
                                     "end: new Date(" + dia2.Year + "," + dia2.Month + "-1," + i + ",11,00)," +
                                     "allDay: false," +
                                     "backgroundColor: '#000000'," +
                                     "borderColor: '#000000'},");
                eventos = string.Concat(eventos, "{" +
                                 "id: 'CASYS'," +
                                 "title: 'CASYS RECESO'," +
                                 "start: new Date(" + dia2.Year + "," + dia2.Month + "-1," + i + ",20,0)," +
                                 "end: new Date(" + dia2.Year + "," + dia2.Month + "-1," + i + ",20,15)," +
                                 "allDay: false," +
                                 "backgroundColor: '#000000'," +
                                 "borderColor: '#000000'},");
            }
           eventos = string.Concat(eventos, "]");
           return eventos;
            
        }
        
        /// <summary>
        /// Método para obtener la seccion de la carrera de la distribucion
        /// </summary>
        /// <param name="_codDistribucion">Código de la distribucion para obtener su carrera</param>
        /// <param name="_idDocente">Código de del docente</param>
        /// <returns></returns>
        [System.Web.Services.WebMethod(true)]
        public static string obtenerSeccion(int _codDistribucion, int _idDocente)
        {
            catalogoDistribucion _objCatalogoDistribucion = new catalogoDistribucion();
            catalogoCarrera _objCatalogoCarrera = new catalogoCarrera();

            var resultadoCarrera = _objCatalogoCarrera.obtenerCarrera(_idDocente).Where(C => C.idCarrera == _objCatalogoDistribucion.obtenerDistribucion(_idDocente).Where(H => H.idDistribucion == _codDistribucion).First().idCarrera);


            if (resultadoCarrera.First().seccion == "DIURNA")
            {
                return "minTime: '7:30'," +
                "maxTime:'18'," +
                "slotMinutes: 30,";

            }
            else
            {
                return "minTime: '17'," +
                "maxTime:'22:15'," +
                 "slotMinutes: 15,";
            }
        }
    }
}